library("survival")
library("survminer")
## Loading required package: ggplot2
## Loading required package: ggpubr
##
## Attaching package: 'survminer'
## The following object is masked from 'package:survival':
##
## myeloma
library("viridis")
## Loading required package: viridisLite
library("plotly")
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
library("htmlwidgets")
library("GGally")
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
library("tidyverse")
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ tibble 3.1.6 ✓ dplyr 1.0.8
## ✓ tidyr 1.2.0 ✓ stringr 1.4.0
## ✓ readr 2.1.2 ✓ forcats 0.5.1
## ✓ purrr 0.3.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks plotly::filter(), stats::filter()
## x dplyr::lag() masks stats::lag()
# Creating basic model:
surv1 <- survfit(Surv(time,status) ~ sex, data = lung)
# Getting data for plotly graph
p <- ggsurv(surv1, CI = T)
df <- data.frame(prob = p$data$surv, sex = p$data$group,
upper = p$data$up, lower = p$data$low, time = p$data$time)
df$sex <- ifelse(df$sex == 1, "Male", "Female")
df$sex <- as.factor(df$sex)
df_wider <- df %>%
pivot_wider(names_from = sex, values_from = prob)
df_wider$MaleUpper <- ifelse(!is.na(df_wider$Male), df_wider$upper, NA)
df_wider$MaleLower <- ifelse(!is.na(df_wider$Male), df_wider$lower, NA)
df_wider$FemaleUpper <- ifelse(!is.na(df_wider$Female), df_wider$upper, NA)
df_wider$FemaleLower <- ifelse(!is.na(df_wider$Female), df_wider$lower, NA)
# Plotly interactive graph:
p_i <- plot_ly() %>%
add_lines(x = df_wider$time, y = ~df_wider$MaleUpper, name = "Upper Bound",
line = list(width=2, dash="dot", color = '#481567FF'), showlegend = FALSE
, hovertemplate = paste('%{y}')) %>%
add_lines(x = df_wider$time, y = ~df_wider$Male, name = "Male", line = list(color = '#481567FF')
, hovertemplate = paste('%{y}')) %>%
add_lines(x = df_wider$time, y = ~df_wider$MaleLower, name = "Lower Bound",
line = list(width=2, dash="dot", color = '#481567FF'), showlegend = FALSE
, hovertemplate = paste('%{y}')) %>%
add_lines(x = df_wider$time, y = ~df_wider$FemaleUpper, name = "Upper Bound",
line = list(width=2, dash="dot", color = '#DCE319FF'), showlegend = FALSE
, hovertemplate = paste('%{y}')) %>%
add_lines(x = df_wider$time, y = ~df_wider$Female, name = "Female", line = list(color = '#DCE319FF')
, hovertemplate = paste('%{y}')) %>%
add_lines(x = df_wider$time, y = ~df_wider$FemaleLower, name = "Upper Bound",
line = list(width=2, dash="dot", color = '#DCE319FF'), showlegend = FALSE
, hovertemplate = paste('%{y}')) %>%
layout(hovermode = "x unified",
title = "Survival Curves of Men and Women With Lung Cancer",
xaxis = list(title = "Time (in days)"),
yaxis = list(title = "Survival Probability")) %>%
rangeslider()
p_i